 1.Kafka集群与运维之集群应用场景
   
   1).消息传递
   Kafka可以很好地替代传统邮件代理。消息代理的使用有多种原因（将处理与数据生产者分离，缓冲未处理的消息
等）。与大多数邮件系统相比，Kafka具有更好的吞吐量，内置的分区，复制和容错功能，这使其成为大规模邮件处理
应用程序的理想解决方案。
   根据我们的经验，消息传递的使用通常吞吐量较低，但是可能需要较低的端到端延迟，并且通常取决于Kafka提供的强
大的持久性保证。
   在这个领域，Kafka与ActiveMQ或 RabbitMQ等传统消息传递系统相当。
   2).网站活动路由
   Kafka最初的用例是能够将用户活动跟踪管道重建为一组实时的发布-订阅。这意味着将网站活动（页面浏览，搜
索或用户可能采取的其他操作）发布到中心主题，每种活动类型只有一个主题。这些提要可用于一系列用例的订阅，
包括实时处理，实时监控，以及加载到Hadoop或脱机数据仓库系统中以进行脱机处理和报告。 
   活动跟踪通常量很大，因为每个用户页面视图都会生成许多活动消息。
   3).监控指标
   Kafka通常用于操作监控数据。这涉及汇总来自分布式应用程序的统计信息，以生成操作数据的集中。
   4).日志汇总
   许多人使用Kafka代替日志聚合解决方案。日志聚合通常从服务器收集物理日志文件，并将它们放在中央位置（也
许是文件服务器或HDFS）以进行处理。Kafka提取文件的详细信息，并以日志流的形式更清晰地抽象日志或事件数
据。这允许较低延迟的处理，并更容易支持多个数据源和分布式数据消耗。与以日志为中心的系统（例如Scribe或
Flume）相比，Kafka具有同样出色的性能，由于复制而提供的更强的耐用性保证以及更低的端到端延迟。
   5).流处理
   Kafka的许多用户在由多个阶段组成的处理管道中处理数据，其中原始输⼊数据从Kafka主题中使用，然后进行汇
总，充实或以其他方式转换为新主题，以供进一步使用或后续处理。例如，用于推荐新闻文章的处理管道可能会从RSS
提要中检索文章内容，并将其发布到“文章”主题中。进一步的处理可能会使该内容规范化或重复数据删除，并将清洗后
的文章内容发布到新主题中；最后的处理阶段可能会尝试向用户推荐此内容。这样的处理管道基于各个主题创建实时
数据流的图形。从0.10.0.0 开始，一个轻量但功能强⼤的流处理库称为Kafka Streams 可以在Apache Kafka中使用来
执行上述数据处理。除了Kafka Streams以外，其他开源流处理工具还包括Apache Storm和 Apache Samza。
   6).活动采集
   事件源是一种应用程序，其中状态更改以时间顺序记录记录。Kafka对大量存储的日志数据的支持使其成为以这种
样式构建的应用程序的绝佳后端。
   7).提交日志
   Kafka可以用作分布式系统的一种外部提交日志。该日志有助于在节点之间复制数据，并充当故障节点恢复其数据
的重新同步机制。Kafka中的日志压缩功能有助于支持此用法。在这种用法中，Kafka类似于Apache BookKeeper项目。
   (1).横向扩展，提高Kafka的处理能力
   (2).镜像，副本，提供高可用。
 
 2.集群搭建
   
   (1).搭建设计
   (2).分配三台Linux，用于安装拥有三个节点的Kafka集群。
   linux121(192.168.71.100)
   linux122(192.168.71.101)
   linux123(192.168.71.102)
   以上三台主机的/etc/hosts配置：
   192.168.71.100 linux121
   192.168.71.101 linux122
   192.168.71.102 linux123
   1).Zookeeper集群搭建
   (1).Linux安装JDK，三台Linux都安装。
       上传JDK到linux
	   安装并配置JDK
   # 使用rpm安装JDK
   rpm -ivh jdk-8u261-linux-x64.rpm
   # 默认的安装路径是/usr/java/jdk1.8.0_261-amd64
   # 配置JAVA_HOME
   vim /etc/profile
   # 文件最后添加两行
   export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
   export PATH=$PATH:$JAVA_HOME/bin
   # 退出vim，使配置生效
   source /etc/profile
      查看JDK是否正确安装
   java -version
   (2).Linux 安装Zookeeper，三台Linux都安装，以搭建Zookeeper集群
      上传zookeeper-3.4.14.tar.gz 到Linux
	  解压并配置zookeeper
   # linux121操作
   # 解压到/opt目录
   tar -zxf zookeeper-3.4.14.tar.gz -C /opt
   # 配置
   cd /opt/zookeeper-3.4.14/conf
   cp zoo_sample.cfg zoo.cfg
   vim zoo.cfg
   # 设置
   dataDir=/var/lagou/zookeeper/data
   # 添加
   server.1=linux121:2881:3881
   server.2=linux122:2881:3881
   server.3=linux123:2881:3881
   # 退出vim
   mkdir -p /var/lagou/zookeeper/data
   echo 1 > /var/lagou/zookeeper/data/myid
   # 配置环境变量
   vim /etc/profile
   # 添加
   export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
   export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
   export ZOO_LOG_DIR=/var/lagou/zookeeper/log
   # 退出vim，让配置生效
   source /etc/profile
   # 将/opt/zookeeper-3.4.14拷贝到linux122，linux123
   scp -r /opt/zookeeper-3.4.14/ linux122:/opt
   scp -r /opt/zookeeper-3.4.14/ linux123:/opt
   linux122配置
   # 配置环境变量
   vim /etc/profile
   # 在配置JDK环境变量基础上，添加内容
   export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
   export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
   export ZOO_LOG_DIR=/var/lagou/zookeeper/log
   # 退出vim，让配置生效
   source /etc/profile
   mkdir -p /var/lagou/zookeeper/data
   echo 2 > /var/lagou/zookeeper/data/myid
   linux123配置
   # 配置环境变量
   vim /etc/profile
   # 在配置JDK环境变量基础上，添加内容
   export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
   export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
   export ZOO_LOG_DIR=/var/lagou/zookeeper/log
   # 退出vim，让配置生效
   source /etc/profile
   mkdir -p /var/lagou/zookeeper/data
   echo 3 > /var/lagou/zookeeper/data/myid
   # 在三台Linux上启动Zookeeper
   [root@linux121 ~]# zkServer.sh start
   [root@linux122 ~]# zkServer.sh start
   [root@linux123 ~]# zkServer.sh start
   # 在三台Linux上查看Zookeeper的状态
   [root@linux121 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
   [root@linux122 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
   [root@linux123 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
   2).Kafka集群搭建
   安装Kafka
     上传并解压Kafka到/opt
   # 解压到/opt
   tar -zxf kafka_2.12-1.0.2.tgz -C /opt
   # 拷贝到linux122和linux123
   scp -r /opt/kafka_2.12-1.0.2/ linux122:/opt
   scp -r /opt/kafka_2.12-1.0.2/ linux123:/opt
     配置Kafka
   # 配置环境变量，三台Linux都要配置
   vim /etc/profile
   # 添加以下内容：
   export KAFKA_HOME=/opt/kafka_2.12-1.0.2
   export PATH=$PATH:$KAFKA_HOME/bin
   # 让配置生效
   source /etc/profile
   # linux121配置
   vim /opt/kafka_2.12-1.0.2/config/server.properties
   broker.id=0
   listeners=PLAINTEXT://:9092
   advertised.listeners=PLAINTEXT://linux121:9092
   log.dirs=/var/lagou/kafka/kafka-logs
   zookeeper.connect=linux121:2181,linux122:2181,linux123:2181/myKafka
   # 其他使用默认配置
   # linux122配置
   vim /opt/kafka_2.12-1.0.2/config/server.properties
   broker.id=1
   listeners=PLAINTEXT://:9092
   advertised.listeners=PLAINTEXT://linux122:9092
   log.dirs=/var/lagou/kafka/kafka-logs
   zookeeper.connect=linux121:2181,linux122:2181,linux123:2181/myKafka
   # 其他使用默认配置
   # linux123配置
   vim /opt/kafka_2.12-1.0.2/config/server.properties
   broker.id=2
   listeners=PLAINTEXT://:9092
   advertised.listeners=PLAINTEXT://linux123:9092
   log.dirs=/var/lagou/kafka/kafka-logs
   zookeeper.connect=linux121:2181,linux122:2181,linux123:2181/myKafka
   # 其他使用默认配置
     启动Kafka
   [root@linux121 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/
server.properties
   [root@linux122 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/
server.properties
   [root@linux123 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/
server.properties
   验证Kafka
   linux121节点的Cluster Id：
   linux122节点的Cluster Id：
   linux123节点的Cluster Id：
   (1).Cluster Id是一个唯一的不可变的标志符，用于唯一标志一个Kafka集群。
   (2).该Id最多可以有22个字符组成，字符对应于URL-safe Base64。
   (3).Kafka 0.10.1 版本及之后的版本中，在集群第一次启动的时候，Broker从Zookeeper的
<Kafka_ROOT>/cluster/id节点获取。如果该Id不存在，就自动生成一个新的。
   zkCli.sh
   # 查看每个Broker的信息
   get /brokers/ids/0
   get /brokers/ids/1
   get /brokers/ids/2   